//声明式函数 函数表达式（匿名函数） 自执行函数
//1、声明式函数：先声明，后执行，所有调用可以在声明之前
f();
function f() {
    console.log("声明式函数执行了");
}
console.log("------------------------------");

//2、函数表达式（匿名函数）：在代码执行时才能声明函数并给变量赋值，所以不能提前调用
//f1(); ReferenceError: f1 is not defined
//f2(); ReferenceError: Cannot access 'f2' before initialization
let f2 = function f1() { //匿名函数f1()将无效
    console.log("匿名函数执行了");
}
f2();
console.log("------------------------------");

//3、自执行函数：声明完成立即执行，不用单独调用，第一个()是声明，第二个()是执行并传参
(function (a, b) {
    console.log("自执行函数执行了，计算结果：" + (a + b));
})(1, 2);